package com.gr3g.dev.xml;

import java.io.File;
import java.io.InputStream;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/** @author Gregory Tardivel */
public final class Converter {

    /** Charger un fichier objet à partir de son équivalent XML.
     * @param xml Fichier XML
     * @param contextPath Package de l'ObjectFactory
     * @return L'objet <T>
     * @throws JAXBException */
    public static <T> T loadXML(final InputStream xml, final String contextPath) {
        T retour = null;
        try {
            final JAXBContext jaxbContext = JAXBContext
                    .newInstance(contextPath);
            final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
            retour = (T) unmarshaller.unmarshal(xml);
        } catch (final JAXBException exc) {
            exc.printStackTrace();
        }
        return retour;
    }

    /** Générer un fichier XML à partir d'un objet Java.
     * @param objet Objet Java
     * @param xml Fichier XML
     * @throws JAXBException */
    public static void generateXML(final Object objet, final File xml) {
        try {
            final JAXBContext jaxbContext = JAXBContext.newInstance(objet
                    .getClass());
            final Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(objet, xml);
        } catch (final JAXBException exc) {
            exc.printStackTrace();
        }
    }
}
